home *** CD-ROM | disk | FTP | other *** search
/ Windows 6-Pak - Disc 4 / Windows 6-Pak (InfoMagic) (Disc 4) (1999).ISO / Text-Chat-Scripts / pp-320m.exe / addons / uemail1.mrc next >
Encoding:
Text File  |  1998-07-11  |  29.3 KB  |  765 lines

  1. ; -----------------------------------------------------
  2. ; Peace and Protection (by misspai)
  3. ; -----------------------------------------------------
  4. ; ADDON: E-Mail (1 of 2)
  5. ; -----------------------------------------------------
  6. alias echeck {
  7.   if ($1 == q) { ecancel q ! | set %_+emc.quiet $true }
  8.   else { ecancel ! ! | unset %_+emc.quiet }
  9.   window -c @EMail
  10.   if (%email.pop3 == $null) _error POP3 server not defined- See E-Mail setup
  11.   if (%email.user == $null) _error POP3 account name not defined- See E-Mail setup
  12.   if (%_+emc.quiet) goto pw
  13.   window -l @EMail $_winpos(14%,7%,8%,8%) @EMail %font.basic
  14.   titlebar @EMail check
  15.   aline @EMail $chr(160)
  16.   aline @EMail Checking for new e-mail... (account %email.accnum $+ - %email.account $+ )
  17.   aline @EMail $chr(160)
  18.   :pw
  19.   if (%email.pw == $null) _askr _ech2 E-Mail password?
  20.   else _ech2 $_pwenc(%email.pw)
  21. }
  22. alias _ech2 {
  23.   set %_emc.pw $1
  24.   set %_emc.act c
  25.   .enable #_echeck
  26.   if ($_not(%_+emc.quiet)) aline @EMail Logging in to POP3 server...
  27.   sockopen ULTE-CHECK %email.pop3 110
  28. }
  29. alias ecancel {
  30.   window -c @EWrap | window -c @Progress
  31.   _qlogc $2
  32.   .disable #_echeck #_echecklist #_echeckheader #_echeckget #_echeckgett
  33.   if (($1 == $null) && ($_isopen(@EMail))) .disable #_epopup1 #_epopup2
  34.   unset %_emc.stage %_emc.act %_emc.num %_emc.max %_emc.curr %_emc.prev %_emc.hlog %_emc.plog %_emc.lhead %_+emc.quiet %_emc.glue
  35.   if ($1 != q) .disable #_email-tb
  36. }
  37. alias _qlogc if ($sock(ULTE-*,0) > 0) { sockwrite ULTE-* $eends(QUIT) | if ($1) sockclose ULTE-* | else sockmark ULTE-* DIE }
  38. on 1:sockwrite:ULTE-*:if ($sock($sockname).mark == DIE) sockclose $sockname
  39. alias _echeader {
  40.   if ($window(@EMail) != $null) clear @EMail
  41.   else {
  42.     window -c @EMail
  43.     window -l @EMail $_winpos(14%,7%,8%,8%) @EMail %font.basic
  44.   }
  45.   titlebar @EMail check- headers
  46.   aline @EMail E-Mail waiting-
  47.   aline @EMail $chr(160)
  48.   set %_emc.act h
  49.   .enable #_echeck
  50.   sockopen ULTE-CHECK %email.pop3 110
  51. }
  52. alias _ecsall set %.lp $line(@EMail,0) | :loop | sline -a @EMail %.lp | if ($_vd(.lp) > 0) goto loop
  53. alias _ecdo {
  54.   if (s isin $1) {
  55.     sline -r @EMail 1 | sline -r @EMail 2
  56.     sline -r @EMail $line(@EMail,0)
  57.     sline -r @EMail $calc($line(@EMail,0) - 1)
  58.     sline -r @EMail $calc($line(@EMail,0) - 2)
  59.     if ($sline(@EMail,0) < 1) _error You must select one or more e-mails first!
  60.   }
  61.   titlebar @EMail check- performing operation
  62.   set %_emc.act $1
  63.   if (g isin $1) {
  64.     window @EWrap $_winpos(14%,7%,8%,8%) %font.basic
  65.     window -h @EWrap
  66.   }
  67.   .enable #_echeck
  68.   sockopen ULTE-CHECK %email.pop3 110
  69. }
  70. on 1:close:@EMail:ecancel | unset %_emc.pw
  71. alias _ecnew {
  72.   set %.new 1
  73.   :loop
  74.   set %.win @EMail $+ %.new
  75.   if ($window(%.win) != $null) { inc %.new | goto loop }
  76.   inc %_emc.left
  77.   if ((%_emc.left < 3) || (%_emc.left > 13)) set %_emc.left 3
  78.   set %.left %_emc.left $+ %
  79.   set %.right $calc(16 - %_emc.left) $+ %
  80.   window -ln %.win $_winpos(14%,7%,%.left,%.right) @EMailR %font.basic
  81.   set %_emc.hlog $_ppdir $+ e $+ %.new $+ tmp.txt
  82.   if ($exists(%_emc.hlog)) .remove %_emc.hlog
  83.   return %.win
  84. }
  85. #_echeck off
  86. on 1:sockopen:ULTE-CHECK:{
  87.   if ($sockerr > 0) { if (%_+emc.quiet) halt | _error Error connecting to mail server }
  88.   sockwrite ULTE-CHECK USER $eends(%email.user)
  89.   sockwrite ULTE-CHECK PASS $eends(%_emc.pw)
  90.   set %_emc.stage -1
  91. }
  92. on 1:sockclose:ULTE-CHECK:ecancel | if (%_+emc.quiet) halt | _error Mail server disconnected unexpectedly
  93. on 1:sockread:ULTE-CHECK:{
  94.   :loop
  95.   sockread %.sockdata
  96.   if ($sockbr == 0) return
  97.   if ($left(%.sockdata,3) == +OK) _echeckdo1 %.sockdata
  98.   elseif ($left(%.sockdata,4) == -ERR) { ecancel | _error Error from mail server- %.sockdata }
  99.   else _echeckdo2 %.sockdata
  100.   goto loop
  101. }
  102. alias -l _echeckdo1 {
  103.   if ($_vi(_emc.stage) == 0) halt
  104.   if (%_emc.stage == 1) {
  105.     if (%_emc.act == c) if ($_not(%_+emc.quiet)) aline @EMail User name accepted...
  106.   }
  107.   elseif (%_emc.stage == 2) {
  108.     if (%_emc.act == c) {
  109.       if ($_not(%_+emc.quiet)) aline @EMail Password accepted...
  110.       sockwrite ULTE-CHECK $eends(STAT)
  111.     }
  112.     elseif (%_emc.act == h) sockwrite ULTE-CHECK $eends(LIST)
  113.     elseif ($left(%_emc.act,1) == a) sockwrite ULTE-CHECK $eends(STAT)
  114.     else {
  115.       set %_emc.max $sline(@EMail,0) | set %_emc.num 1
  116.       inc %_emc.stage
  117.       goto doas
  118.     }
  119.   }
  120.   elseif (%_emc.stage == 3) {
  121.     if (%_emc.act == c) {
  122.       if (%_+emc.quiet) { ecancel | _eac.fin 0 $2 $3 | halt }
  123.       ecancel
  124.       if ($2 == 0) aline @EMail No new e-mail detected.
  125.       else {
  126.         aline @EMail --> %col.att $+ $2 <-- e-mail messages waiting ( $+ %col.dark $+ $3 bytes)
  127.         aline @EMail $chr(160)
  128.         aline @EMail Right-click on this window for options, or press F4 to get message headers.
  129.         window -b @EMail
  130.         .enable #_epopup1
  131.       }
  132.     }
  133.     elseif (%_emc.act == h) .enable #_echecklist
  134.     else {
  135.       if ($2 == 0) { ecancel | _error No e-mail to get/delete! }
  136.       set %_emc.max $2 | set %_emc.num 1
  137.       goto doas
  138.     }
  139.   }
  140.   elseif ($left(%_emc.act,1) isin as) {
  141.     :doas
  142.     set %_emc.prev %_emc.curr
  143.     set %_emc.plog %_emc.hlog
  144.     .disable #_echeckgett
  145.     if (%email.get.reverse) {
  146.       if ($left(%_emc.act,1) == a) { set %_emc.curr $calc(%_emc.max - %_emc.num + 1) }
  147.       else { set %_emc.curr $sline(@EMail,$calc(%_emc.max - %_emc.num + 1)).ln | dec %_emc.curr 2 }
  148.     }
  149.     else {
  150.       if ($left(%_emc.act,1) == a) { set %_emc.curr %_emc.num }
  151.       else { set %_emc.curr $sline(@EMail,%_emc.num).ln | dec %_emc.curr 2 }
  152.     }
  153.     if (gd isin %_emc.act) {
  154.       if ($calc(%_emc.stage % 2) == 1) set %.todo g
  155.       else set %.todo d
  156.     }
  157.     else set %.todo $right(%_emc.act,1)
  158.     if (%.todo == g) { sockwrite ULTE-CHECK RETR $eends(%_emc.curr) | set %_emc.curr $_ecnew | .enable #_echeckget }
  159.     else sockwrite ULTE-CHECK DELE $eends(%_emc.curr)
  160.     if ((gd isin %_emc.act) && (%.todo == g)) halt
  161.     if ($_vi(_emc.num) > %_emc.max) set %_emc.act q $+ %_emc.act
  162.   }
  163.   elseif (d isin %_emc.act) {
  164.     if (a isin %_ema.act) window -c @EMail
  165.     else {
  166.       set %.num $sline(@EMail,0)
  167.       :loop
  168.       dline @EMail $sline(@EMail,%.num).ln
  169.       if ($_vd(.num) > 0) goto loop
  170.       if ($line(@Email,0) < 6) window -c @EMail
  171.       if (g isin %_emc.act) {
  172.         if (@EMail !isin $active) dispa E-Mail download completed.
  173.         if ($_isopen(@EMail)) window -n @EMail
  174.       }
  175.     }
  176.     ecancel !
  177.   }
  178.   else {
  179.     set %_emc.prev %_emc.curr
  180.     set %_emc.plog %_emc.hlog
  181.     .disable #_echeckgett
  182.     set %_emc.act %_emc.act $+ z
  183.   }
  184. }
  185. #_echeck end
  186. #_echeckgett off
  187. alias -l _echeckdo2 {
  188.   if ($1- == .) { if ($_not(%email.get.min)) window -ar %_emc.prev | if (z isin %_emc.act) { if (@EMail !isin $active) dispa E-Mail download completed. | window -n @EMail | ecancel ! } }
  189.   elseif ($left($1,1) isin >-) aline $strip($remove(%col.dark,)) %_emc.prev $1-
  190.   elseif ($left($1,1) == .) _domline %_emc.glue $_rchop(1,$1-)
  191.   else _domline %_emc.glue $1-
  192. }
  193. alias _domline2 _domline $1-
  194. alias _domline {
  195.   if (($right($1-,1) == =) || (%_emc.glue != $null)) {
  196.     unset %_emc.glue
  197.     set %.todo $replace($replace($replace($replace($1-,=0D,),=0A,),=92,$chr(146)),=3D,=)
  198.     set %.toks $_numtok(127,%.todo)
  199.     if ($right($1-,1) == =) { dec %.toks | set %.glue $_lchop(1,$_rtok(1,127,%.todo)) }
  200.     else unset %.glue
  201.     set %.todo $_ltok(%.toks,127,%.todo)
  202.     if (%.todo != $null) {
  203.       set %.num0 1
  204.       :loop0
  205.       _domline2 $gettok(%.todo,%.num0,127)
  206.       if ($_vi(.num0) <= %.toks) goto loop0
  207.     }
  208.     set %_emc.glue %.glue
  209.     return
  210.   }
  211.   unset %_emc.glue
  212.   if ($1 == $null) aline %_emc.prev $chr(160)
  213.   elseif ($len($1-) <= 80) aline %_emc.prev $1-
  214.   else {
  215.     echo -h @EWrap $1-
  216.     unset %.pre | set %.num $line(@EWrap,0)
  217.     if (%.num == 1) { aline %_emc.prev $1- | dline @EWrap 1 }
  218.     else {
  219.       :loop
  220.       aline %_emc.prev %.pre $+ $line(@EWrap,1)
  221.       dline @EWrap 1 | if ($_vd(.num) > 0) { set %.pre $str($chr(160),2) | goto loop }
  222.     }
  223.   }
  224. }
  225. #_echeckgett end
  226. #_echeckget off
  227. alias -l _echeckdo2 {
  228.   if ($1- == .) { if ($_not(%email.get.min)) window -ar %_emc.prev | if (z isin %_emc.act) { if (@EMail !isin $active) dispa E-Mail download completed. window -n @EMail | ecancel ! } }
  229.   else {
  230.     if ($1 == $null) { .enable #_echeckgett | aline %_emc.prev $chr(160) | unset %_emc.glue }
  231.     else {
  232.       if (: isin $1) { set %.head $1 | set %.body $2- }
  233.       else { set %.head %_emc.lhead | set %.body $1- }
  234.       write %_emc.plog $1-
  235.       if ((MIME !isin %.head) && (Content- !isin %.head) && (X- !isin %.head) && ($findtok(Received:.Message-ID:.Sender:.Status:.Precedence:,%.head,46) == $null)) aline %col.base %_emc.prev  $+ %.head $+  %.body
  236.       if (%.head == From:) { if (@ isin %.body) _dynpop.rot email 9 %.body | titlebar %_emc.prev $window(%_emc.prev).titlebar - From: %.body }
  237.       elseif (%.head == Subject:) titlebar %_emc.prev - %.body $window(%_emc.prev).titlebar
  238.       elseif ((%.head == Reply-to:) && (@ isin %.body)) _dynpop.rot email 9 %.body
  239.       set %_emc.lhead %.head
  240.     }
  241.   }
  242. }
  243. #_echeckget end
  244. #_echecklist off
  245. alias -l _echeckdo2 {
  246.   if ($1- == .) { .disable #_echecklist | .enable #_echeckheader | set %_emc.num 3 }
  247.   elseif ($2 != $null) { if ($2 > 9999) aline @EMail $chr(160) ò %col.dark $+ $1 ò %col.att $+ ( $+ $round($calc($2 / 1024),1) $+ k) ò | else aline @EMail $chr(160) ò %col.dark $+ $1 ò ( $+ $2 bytes) ò | sockwrite ULTE-CHECK TOP $1 $eends(1) }
  248. }
  249. #_echecklist end
  250. #_echeckheader off
  251. alias -l _echeckdo2 {
  252.   if ($2 != $null) {
  253.     if (From? iswm $1) rline @EMail %_emc.num $line(@EMail,%_emc.num) From: %col.target $+ $2- ò
  254.     elseif (Subject? iswm $1) rline @EMail %_emc.num $line(@EMail,%_emc.num) %col.dark $+ $2- ò
  255.   }
  256.   elseif ($1 == .) {
  257.     inc %_emc.num
  258.     if ($line(@EMail,%_emc.num) == $null) {
  259.       aline @EMail $chr(160)
  260.       aline @EMail Select one or more e-mails and right-click for options.
  261.       aline @EMail Or, right-click for other options. Press F4 to get all messages. (leaving them on the server)
  262.       window -b @EMail
  263.       ecancel
  264.       .enable #_epopup2
  265.     }
  266.   }
  267. }
  268. #_echeckheader end
  269. #_epopup1 off
  270. menu @EMail {
  271.   Get headers (from/subject):_echeader
  272.   -
  273.   Get all, leave on server:_ecdo ag
  274.   Get all, delete from server:_ecdo agd
  275.   Delete all messages:_ecdo ad
  276.   -
  277.   Close + cancel:ecancel | window -c @EMail
  278. }
  279. #_epopup1 end
  280. #_epopup2 off
  281. menu @EMail {
  282.   Get selected, leave on server:_ecdo sg
  283.   Get selected, delete from server:_ecdo sgd
  284.   Delete selected:_ecdo sd
  285.   -
  286.   Get all, leave on server:_ecsall | _ecdo sg
  287.   Get all, delete from server:_ecsall | _ecdo sgd
  288.   Delete all messages:_ecsall | _ecdo sd
  289.   -
  290.   Close all incoming email:_cloem
  291.   -
  292.   Close + cancel:ecancel | window -c @EMail
  293. }
  294. #_epopup2 end
  295. menu @EMail {
  296.   Close + cancel:ecancel | window -c @EMail
  297. }
  298. on 1:start:{
  299.   set %.num 1 | :loop
  300.   set %.log $_ppdir $+ e $+ %.num $+ tmp.txt
  301.   if ($exists(%.log)) { .remove %.log | inc %.num | goto loop }
  302. }
  303. menu @EMailR {
  304.   $_exec(set %.bks [ $_mailcfg(Books) ] ):{ }
  305.   Reply
  306.   .Quote none...:_er.reply $active r n
  307.   .Quote all...:_er.reply $active r a
  308.   .Quote selection...:_er.reply $active r s
  309.   Forward
  310.   .Entire e-mail...:_er.reply $active f a
  311.   .Selected text...:_er.reply $active f s
  312.   Misc
  313.   .Add sender to address book
  314.   ..Book 1. $_a2x($_mailcfg(Book1,Name)):_er.abook $active 1
  315.   ..$_tf2any( [ $_if( [ %.bks ] > 1) ] ,Book2.,$null) $_a2x($_mailcfg(Book2,Name)):_er.abook $active 2
  316.   ..$_tf2any( [ $_if( [ %.bks ] > 2) ] ,Book3.,$null) $_a2x($_mailcfg(Book3,Name)):_er.abook $active 3
  317.   ..$_tf2any( [ $_if( [ %.bks ] > 3) ] ,Book4.,$null) $_a2x($_mailcfg(Book4,Name)):_er.abook $active 4
  318.   ..$_tf2any( [ $_if( [ %.bks ] > 4) ] ,More....,$null):_ebsel _er.abook $active Book to add sender to?
  319.   .Extract all e-mails in headers
  320.   ..Book 1. $_a2x($_mailcfg(Book1,Name)):_er.abookx $active 1
  321.   ..$_tf2any( [ $_if( [ %.bks ] > 1) ] ,Book2.,$null) $_a2x($_mailcfg(Book2,Name)):_er.abookx $active 2
  322.   ..$_tf2any( [ $_if( [ %.bks ] > 2) ] ,Book3.,$null) $_a2x($_mailcfg(Book3,Name)):_er.abookx $active 3
  323.   ..$_tf2any( [ $_if( [ %.bks ] > 3) ] ,Book4.,$null) $_a2x($_mailcfg(Book4,Name)):_er.abookx $active 4
  324.   ..$_tf2any( [ $_if( [ %.bks ] > 4) ] ,More....,$null):_ebsel _er.abookx $active Book to extract e-mails to?
  325.   .View headers...:set %.fn $_ppdir $+ e $+ $remove($active,@EMail) $+ tmp.txt | if ($_not($exists(%.fn))) _error Headers file for e-mail missing! | open @Info /esend E-Mail headers | loadbuf @Info %.fn
  326.   .-
  327.   .Save to file...:set %_arhelp _er.export $active . | _askr _arhelp Filename to save mail to?
  328.   .Save to file and edit...:set %_arhelp _er.export $active ! | _askr _arhelp Filename to save mail to?
  329.   -
  330.   Copy
  331.   .One line:clipboard $sline($active,1)
  332.   .Open copy window...:_er.copywin $active
  333.   -
  334.   Close:window -c $active
  335. }
  336. alias _er.abook {
  337.   set %.num 1 | set %.ini Book $+ $2
  338.   :loop1 | if ($left($line($1,%.num),7) != From:) { inc %.num | goto loop1 }
  339.   set %.from $gettok($gettok($line($1,%.num),2-,32),1,44)
  340.   :loop2 | if ($_mailcfg(%.ini,%.num) != $null) { inc %.num | goto loop2 }
  341.   if ((< !isin %.from) && ($chr(40) isin %.from)) set %.from $remove($gettok(%.from,2-,40),$chr(41)) < $+ $gettok(%.from,1,40) $+ >
  342.   _writemailc %.ini %.num %.from
  343. }
  344. alias _er.abookx {
  345.   :new
  346.   set %.tmp ~x $+ $r(0,99999) $+ t.txt
  347.   if ($exists(%.tmp)) goto new
  348.   window -c @Importing
  349.   window -n @Importing
  350.   set %.num 1
  351.   :scan
  352.   if ($count($line($active,%.num),$chr(32)) > 0) { inc %.num | goto scan }
  353.   set %.num 1- $+ %.num
  354.   savebuf %.num $active %.tmp
  355.   loadbuf @Importing %.tmp
  356.   .remove %.tmp
  357.   set %email.book Book $+ $2
  358.   ebook
  359.   _ab.import !
  360. }
  361. alias _er.copywin {
  362.   window -c @Copy
  363.   set %.max $sline($1,0)
  364.   if ((%.max < 1) || (%.max > 12)) window -n @Copy $_winpos(14%,7%,7%,7%) @Close %font.basic
  365.   elseif (%.max <= 4) window -n @Copy $_winpos(35%,35%,7%,7%) @Close %font.basic
  366.   else window -n @Copy $_winpos(20%,20%,7%,7%) @Close %font.basic
  367.   set %.num 1
  368.   if (%.max < 1) {
  369.     set %.max $line($1,0)
  370.     :loop1
  371.     echo @Copy $line($1,%.num)
  372.     if ($_vi(.num) <= %.max) goto loop1
  373.   }
  374.   else {
  375.     :loop2
  376.     echo @Copy $sline($1,%.num)
  377.     if ($_vi(.num) <= %.max) goto loop2
  378.   }
  379.   titlebar @Copy window
  380.   window -ar @Copy
  381. }
  382. alias _er.export {
  383.   savebuf $1 $3-
  384.   _recfile2 $3-
  385.   if ($2 == !) edit $3-
  386. }
  387. alias _er.reply {
  388.   set %.num 1 | unset %.from %.subj %.date %.replyto
  389.   :loop1
  390.   set %.line $line($1,%.num)
  391.   if (%.line == $chr(160)) goto next
  392.   if ($left(%.line,7) == From:) set %.from $gettok(%.line,2-,32)
  393.   if ($left(%.line,11) == Reply-to:) set %.replyto $gettok(%.line,2-,32)
  394.   if ($left(%.line,7) == Date:) set %.date $gettok(%.line,2-,32)
  395.   if ($left(%.line,10) == Subject:) set %.subj $gettok(%.line,2-,32)
  396.   inc %.num | goto loop1
  397.   :next
  398.   if (%.subj != $null) {
  399.     if (($2 == r) && ($left(%.subj,3) != re:)) set %.subj Re: %.subj
  400.     if ($2 == f) set %.subj Forwarded: %.subj
  401.   }
  402.   elseif ($2 == f) set %.subj Forwarded e-mail
  403.   if ($2 == f) esend $chr(160) %.subj
  404.   elseif (%.replyto != $null) esend $_s2f(%.replyto) %.subj
  405.   elseif (%.from != $null) esend $_s2f(%.from) %.subj
  406.   else esend $chr(160) %.subj
  407.   if (($3 == n) || (($3 == s) && ($sline($1,0) == 0))) return
  408.   if (%.date != $null) set %.date (on %.date $+ )
  409.   set %.col $strip($remove(%col.dark,))
  410.   if ($2 == f) { unset %.pre | aline %.col $active %.from said %.date - }
  411.   else { set %.pre > | aline %.col $active You said %.date - }
  412.   if ($3 == a) {
  413.     inc %.num
  414.     set %.max $line($1,0)
  415.     :loop2
  416.     if ($line($1,%.max) == $chr(160)) { dec %.max | goto loop2 }
  417.     if (%.num <= %.max) {
  418.       :loop3
  419.       aline %.col $active %.pre $line($1,%.num)
  420.       if ($_vi(.num) <= %.max) goto loop3
  421.     }
  422.     aline -s $active $chr(160)
  423.     sline -r $active $line($active,0)
  424.     return
  425.   }
  426.   set %.num 1
  427.   set %.max $sline($1,0)
  428.   set %.next $sline($1,1).ln
  429.   :loop4
  430.   set %.ln $sline($1,%.num).ln
  431.   if (%.ln != %.next) {
  432.     if ($2 == f) aline %.col $active (... snipped ...)
  433.     else aline $active $chr(160)
  434.   }
  435.   aline %.col $active %.pre $line($1,%.ln)
  436.   set %.next $_i(%.ln)
  437.   if ($_vi(.num) <= %.max) goto loop4
  438.   aline -s $active $chr(160)
  439.   sline -r $active $line($active,0)
  440. }
  441. alias esend {
  442.   unset %.new
  443.   :loop
  444.   set %.win @Compose $+ %.new
  445.   if ($window(%.win) != $null) { if (%.new == $null) inc %.new | inc %.new | goto loop }
  446.   inc %_emc.left
  447.   if ((%_emc.left < 3) || (%_emc.left > 13)) set %_emc.left 3
  448.   set %.left %_emc.left $+ %
  449.   set %.right $calc(16 - %_emc.left) $+ %
  450.   window -le %.win $_winpos(14%,7%,%.left,%.right) @Compose %font.basic
  451.   if (@ isin $1) { set %.send $_f2s($1) | set %.subj $2- }
  452.   else { unset %.send | set %.subj $1- }
  453.   aline %.win Type to write message. Don't press Enter except at the end of a paragraph.
  454.   aline %.win If a line is selected, text will insert before the line. (to unselect right-click, unselect)
  455.   aline %.win F4 to send message, right-click for options and editing.
  456.   aline %.win $chr(160)
  457.   if (%.send == $null) {
  458.     set %.send (not given) %col.dark $+ (double-click to edit)
  459.     titlebar %.win e-mail to (none) - %.subj
  460.   }
  461.   else titlebar %.win e-mail to $_s2f(%.send) - %.subj
  462.   if (%.subj == $null) set %.subj (none) %col.dark $+ (double-click to edit)
  463.   aline %col.base %.win To: %.send
  464.   aline %col.base %.win Subject: %.subj
  465.   aline %.win $chr(160)
  466.   editbox %.win $chr(160)
  467.   set %_ [ $+ [ %.win ] ] 8
  468. }
  469. on 1:input:@:{
  470.   if ($left($active,8) != @Compose) return
  471.   set %.todo $_f2s($1-)
  472.   if ($left(%.todo,2) == //) { editbox $active $chr(160) | %.todo | halt }
  473.   set %.iline $sline($active,1).ln
  474.   if (%.iline < %_ [ $+ [ $active ] ] ) set %.iline $_i($line($active,0))
  475.   if (%.todo == $null) iline -a $active %.iline $chr(160)
  476.   elseif (%email.wrap < 1) iline -a $active %.iline %.todo
  477.   else {
  478.     :loop
  479.     if ($len(%.todo) <= %email.wrap) iline -a $active %.iline %.todo
  480.     else {
  481.       set %.text $left(%.todo,$calc(2 + %email.wrap))
  482.       if ($chr(32) !isin $right(%.todo,$calc(%email.wrap / 2))) set %.text $_lchop(4,%.text)
  483.       else set %.text $_ltok($_j($_numtok(32,%.text)),32,%.text)
  484.       iline $active %.iline %.text
  485.       inc %.iline
  486.       set %.todo $_rchop($len(%.text),%.todo)
  487.       goto loop
  488.     }
  489.   }
  490.   sline -r $active %.iline | window -b $active | editbox $active $chr(160) | halt
  491. }
  492. menu @Compose {
  493.   dclick /if ($1 == 5) _ce.editto $active | if ($1 == 6) _ce.editsubj $active | set %.max %_ [ $+ [ $active ] ] | if (($1 > 6) && ($1 < $_j(%.max))) _ce.editf $active $1 | if ($1 >= %.max) _ce.editl $active $1
  494.   Send mail...:_edosend $active
  495.   Import file
  496.   .at end of mail...:_ce.import $active e
  497.   .at selected position...:_ce.import $active s
  498.   .replace mail...:_ce.import $active r
  499.   Save
  500.   .to file...:set %_arhelp _ce.export $active . | _askr _arhelp Filename to save mail to?
  501.   .to file and edit...:set %_arhelp _ce.export $active ! | _askr _arhelp Filename to save mail to?
  502.   -
  503.   Mail to
  504.   .Address book...:ebook $active
  505.   .Recent
  506.   ..%^email.1:_ce.to $active $gettok(%^email.1,2-,32)
  507.   ..%^email.2:_ce.to $active $gettok(%^email.2,2-,32)
  508.   ..%^email.3:_ce.to $active $gettok(%^email.3,2-,32)
  509.   ..%^email.4:_ce.to $active $gettok(%^email.4,2-,32)
  510.   ..%^email.5:_ce.to $active $gettok(%^email.5,2-,32)
  511.   ..%^email.6:_ce.to $active $gettok(%^email.6,2-,32)
  512.   ..%^email.7:_ce.to $active $gettok(%^email.7,2-,32)
  513.   ..%^email.8:_ce.to $active $gettok(%^email.8,2-,32)
  514.   ..%^email.9:_ce.to $active $gettok(%^email.9,2-,32)
  515.   ..-
  516.   ..%^email.clear:unset %^email.*
  517.   .Other...:_ce.editto $active
  518.   .-
  519.   .Carbon copy
  520.   ..Address book...:ebook $active CC
  521.   ..Recent
  522.   ...%^email.1:_ce.cc $active CC $gettok(%^email.1,2-,32)
  523.   ...%^email.2:_ce.cc $active CC $gettok(%^email.2,2-,32)
  524.   ...%^email.3:_ce.cc $active CC $gettok(%^email.3,2-,32)
  525.   ...%^email.4:_ce.cc $active CC $gettok(%^email.4,2-,32)
  526.   ...%^email.5:_ce.cc $active CC $gettok(%^email.5,2-,32)
  527.   ...%^email.6:_ce.cc $active CC $gettok(%^email.6,2-,32)
  528.   ...%^email.7:_ce.cc $active CC $gettok(%^email.7,2-,32)
  529.   ...%^email.8:_ce.cc $active CC $gettok(%^email.8,2-,32)
  530.   ...%^email.9:_ce.cc $active CC $gettok(%^email.9,2-,32)
  531.   ...-
  532.   ...%^email.clear:unset %^email.*
  533.   ..Other...:_ce.cc $active CC
  534.   .Blind CC
  535.   ..Address book...:ebook $active BlindCC
  536.   ..Recent
  537.   ...%^email.1:_ce.cc $active BlindCC $gettok(%^email.1,2-,32)
  538.   ...%^email.2:_ce.cc $active BlindCC $gettok(%^email.2,2-,32)
  539.   ...%^email.3:_ce.cc $active BlindCC $gettok(%^email.3,2-,32)
  540.   ...%^email.4:_ce.cc $active BlindCC $gettok(%^email.4,2-,32)
  541.   ...%^email.5:_ce.cc $active BlindCC $gettok(%^email.5,2-,32)
  542.   ...%^email.6:_ce.cc $active BlindCC $gettok(%^email.6,2-,32)
  543.   ...%^email.7:_ce.cc $active BlindCC $gettok(%^email.7,2-,32)
  544.   ...%^email.8:_ce.cc $active BlindCC $gettok(%^email.8,2-,32)
  545.   ...%^email.9:_ce.cc $active BlindCC $gettok(%^email.9,2-,32)
  546.   ...-
  547.   ...%^email.clear:unset %^email.*
  548.   ..Other...:_ce.cc $active BlindCC
  549.   Subject...:_ce.editsubj $active
  550.   Advanced
  551.   .Reply-to...:_ce.field $active Reply-to
  552.   .Organization...:_ce.field $active Organization
  553.   .-
  554.   .Other...:set %_arhelp _ce.field $active | _askr _arhelp Custom e-mail field to add?
  555.   -
  556.   Delete lines:_ce.del $active
  557.   Delete all...:set %_arhelp _ce.clear $active | _askyn _arhelp Delete entire message?
  558.   -
  559.   Unselect all:sline $active $line($active,0) | sline -r $active $line($active,0)
  560.   Close:window -c $active
  561. }
  562. alias _ce.cc {
  563.   set %.pre %_ [ $+ [ $1 ] ] | dec %.pre 2
  564.   set %.search  $+ $2
  565.   :loop
  566.   set %.tok $remove($gettok($line($1,%.pre),1,32),%.search)
  567.   if ((%.tok == :) || ($remove(%.tok,:) isnum)) goto next
  568.   if ($_vd(.pre) > 3) goto loop
  569.   if ($3 == $null) _ce.field $1 $2 | else _ce.field2 $1 $2 $3-
  570.   return
  571.   :next
  572.   if ($3 == $null) _ce.editf $1 %.pre
  573.   else {
  574.     set %.old $gettok($line($1,%.pre),2-,32)
  575.     if ($len(%.old) > 400) {
  576.       set %.numb $remove(%.tok,:)
  577.       if (%.numb == $null) inc %.numb | inc %.numb
  578.       _ce.field2 $1 $2 $+ %.numb $3-
  579.     }
  580.     else _ce.editf2 $1 %.pre $2 $+ $remove(%.tok,:) %.old $+ , $3-
  581.   }
  582. }
  583. alias _ce.editto {
  584.   set %.email $gettok($line($1,5),2-,32) | set %.chk (not given) %col.dark $+ (double-click to edit) | set %_arhelp _ce.to $1
  585.   if (%.email == %.chk) _askr _arhelp Send e-mail to?
  586.   _pentry _arhelp $+ $_s2p(%.email) Send e-mail to?
  587. }
  588. alias _ce.to if ($2 == $null) halt | rline %col.base $1 5 To: $2- | titlebar $1 e-mail to $_s2f($gettok($2-,1,60)) - $gettok($window($1).titlebar,5-,32) | halt
  589. alias _ce.editsubj {
  590.   set %.subj $gettok($line($1,6),2-,32) | set %.chk (none) %col.dark $+ (double-click to edit) | set %_arhelp _ce.subj $1
  591.   if (%.subj == %.chk) _askr _arhelp Subject of e-mail?
  592.   _pentry _arhelp $+ $_s2p(%.subj) Subject of e-mail?
  593. }
  594. alias _ce.subj if ($2 == $null) halt | rline %col.base $1 6 Subject: $2- | titlebar $1 e-mail to $gettok($window($1).titlebar,3,32) - $2- | halt
  595. alias _ce.clear {
  596.   set %.num %_ [ $+ [ $1 ] ]
  597.   set %.max $line($1,0)
  598.   set %.range %.num $+ - $+ %.max
  599.   dline $1 %.range
  600. }
  601. alias _ce.del {
  602.   set %.pre %_ [ $+ [ $1 ] ]
  603.   :loop
  604.   set %.num $sline($1,1).ln
  605.   if (%.num >= %.pre) { dline $1 %.num | goto loop }
  606.   if ((%.num > 6) && (%.num < $_j(%.pre))) { dline $1 %.num | dec %.pre | dec %_ [ $+ [ $1 ] ] | goto loop }
  607. }
  608. alias _ce.field {
  609.   set %.field $remove($replace($2-,$chr(32),-),:)
  610.   set %.pre %_ [ $+ [ $1 ] ]
  611.   dec %.pre 2
  612.   :loop
  613.   set %.tok $strip($remove($gettok($line($1,%.pre),1,32),:))
  614.   if (%.tok == %.field) _error %.field field already exists, double-click on it to edit it.
  615.   if ($_vd(.pre) > 3) goto loop
  616.   set %_arhelp _ce.field2 $1 %.field
  617.   _askr _arhelp Data for " $+ %.field $+ " field?
  618. }
  619. alias _ce.field2 set %.line %_ [ $+ [ $1 ] ] | iline %col.base $1 $_j(%.line)  $+ $2: $3- | inc %_ [ $+ [ $1 ] ] | window -b $1
  620. alias _ce.editf {
  621.   set %.line $line($1,$2) | set %.field $remove($strip($gettok(%.line,1,32)),:) | set %.data $gettok(%.line,2-,32) | set %_arhelp _ce.editf2 $1 $2 %.field
  622.   _pentry _arhelp $+ $_s2p(%.data) Data for " $+ %.field $+ " field?
  623. }
  624. alias _ce.editf2 rline %col.base $1 $2  $+ $3: $4- | window -b $1
  625. alias _ce.editl {
  626.   set %_arhelp _ce.editl2 $1 $2
  627.   _pentry _arhelp $+ $_s2p($line($1,$2)) Replace line with?
  628. }
  629. alias _ce.editl2 rline $1-
  630. alias _ce.export {
  631.   set %.max %_ [ $+ [ $1 ] ]
  632.   set %.num $line($1,0)
  633.   savebuf $calc(%.num - %.max + 1) $1 $3-
  634.   _recfile2 $3-
  635.   if ($2 == !) edit $3-
  636. }
  637. alias _ce.import {
  638.   _timer924off
  639.   set %.file $dir="File to import?" $mircdir*.txt
  640.   _timer924on
  641.   if ((%.file == $null) || (* isin %.file)) halt
  642.   if ($2 == r) _ce.clear $1
  643.   if ($2 == s) {
  644.     set %.where $sline($1,1).ln
  645.     if (%.where < %_ [ $+ [ $1 ] ] ) loadbuf $1 %.file
  646.     else {
  647.       set %.num $line($1,0)
  648.       set %.range %.where $+ - $+ %.num
  649.       savebuf %.range $1 ppm-ceit.txt
  650.       dline $1 %.range
  651.       loadbuf $1 %.file
  652.       loadbuf $1 ppm-ceit.txt
  653.       .remove ppm-ceit.txt
  654.     }
  655.   }
  656.   else loadbuf $1 %.file
  657. }
  658. alias f4 {
  659.   if ((@EMail isin $active) && ($active != @EMail)) {
  660.     if ($sline($active,0) > 1) _er.reply $active r s
  661.     else _er.reply $active r a
  662.   }
  663.   elseif (($_isopen(@Progress)) && (%_ems.win == $null) && (%_ems.lastwin != $null)) { window -c @Progress | window -c %_ems.lastwin }
  664.   elseif (@Compose isin $active) _edosend $active
  665.   elseif ($_isopen(@EMail)) {
  666.     if ($gettok($line(@EMail,7),1,32) == no) window -c @EMail
  667.     elseif (headers isin $window(@EMail).titlebar) { _ecsall | _ecdo sg }
  668.     elseif (performing isin $window(@EMail).titlebar) window -c @EMail
  669.     else _echeader
  670.   }
  671.   else echeck
  672. }
  673. alias f3 {
  674.   set %.loop $window(0)
  675.   if (%.loop > 0) {
  676.     if (@EMail isin $active) {
  677.       :loop2
  678.       if ($window(%.loop) != $active) { dec %.loop | goto loop2 }
  679.       dec %.loop | if (%.loop < 1) set %.loop $window(0)
  680.     }
  681.     :loop
  682.     if (@EMail isin $window(%.loop)) { window -ar $window(%.loop) | halt }
  683.     if ($_vd(.loop) > 0) goto loop
  684.   }
  685.   cd
  686. }
  687. alias ecfg {
  688.   set %-+eacs.halt $true
  689.   if ($1 == $null) {
  690.     window -c @Account
  691.     window -l @Account $_winpos(14%,7%,18%,18%) @Account %font.basic
  692.     titlebar @Account settings (account %email.accnum $+ )
  693.     aline @Account Current e-mail account settings- (account %col.target $+ %email.accnum $+ )
  694.     aline @Account %=
  695.     _ecfg n | _ecfg po | _ecfg u | _ecfg p | _ecfg s | _ecfg e | _ecfg r | _ecfg f | _ecfg o | _ecfg si | _ecfg w | _ecfg fa | _ecfg au | _ecfg cr
  696.     aline @Account %=
  697.     aline @Account Double-click to edit a setting, right-click to clear a setting.
  698.     halt
  699.   }
  700.   unset %.var %.left
  701.   if ($left($1,2) == po) { set %.var pop3 | set %.is POP3 server }
  702.   elseif ($left($1,2) == si) { set %.var sig | set %.is Signature file }
  703.   elseif ($left($1,2) == cr) { set %.var cret | set %.is Send onlyálineáfeedsáwithoutácarraigeáreturns?á(enableáonlyáifáneeded) }
  704.   elseif ($left($1,2) == fa) { set %.var fastsend | set %.is Fastsend (forácarbon-copy) }
  705.   elseif ($findtok(au.ch.ac,$left($1,2),46) != $null) { set %.var autocheck | set %.is Auto check }
  706.   else {
  707.     set %.left $left($1,1)
  708.     if (%.left == n) { set %.var account | set %.is Account name }
  709.     if (%.left == s) { set %.var smtp | set %.is SMTP server }
  710.     if (%.left == u) { set %.var user | set %.is POP3 username }
  711.     if (%.left == p) { set %.var pw | set %.is POP3 password }
  712.     if (%.left isin ea) { set %.var email | set %.is E-Mail address }
  713.     if (%.left == r) { set %.var replyto | set %.is Reply-to address }
  714.     if (%.left == f) { set %.var ffrom | set %.is "From" field }
  715.     if (%.left == o) { set %.var org | set %.is "Organization" field }
  716.     if (%.left isin lw) { set %.var wrap | set %.is Linewrap width }
  717.   }
  718.   if (%.var == $null) _error Unknown e-mail setting " $+ $1"
  719.   if (! isin $1) set %.pre rline @Account $gettok($1,2,33)
  720.   else set %.pre dispa
  721.   if ($2 == 0) set %email. [ $+ [ %.var ] ]
  722.   elseif ($2 != $null) {
  723.     if (%.left == p) set %email. [ $+ [ %.var ] ] $_pwenc($2-)
  724.     elseif ($left($1,2) == si) set %email. [ $+ [ %.var ] ] $remove($2-,$mircdir)
  725.     else set %email. [ $+ [ %.var ] ] $2-
  726.   }
  727.   if (%email. [ $+ [ %.var ] ] == $null) %.pre %.is set to none. (disabled)
  728.   elseif (%.left == p) %.pre %.is set to - %col.dark $+ (encrypted)
  729.   else %.pre %.is set to - %col.dark $+ %email. [ $+ [ %.var ] ]
  730.   if (%.left == n) {
  731.     set %email.pu [ $+ [ %email.accnum ] ] %email.accnum $+ . %email.account
  732.     set %email.curr Current- %email.accnum $+ . %email.account
  733.   }
  734. }
  735. alias _ecfg ecfg $1! $+ $_i($line(@Account,0))
  736. alias _ecfgdc2 ecfg $gettok(!.!.n.po.u.p.s.e.r.f.o.si.w.fa.au.cr,$1,46) $+ ! $+ $1 $2-
  737. alias _ecfgdc {
  738.   if (($1 < 3) || ($1 > 16)) halt
  739.   if ($1 == 12) {
  740.     _timer924off
  741.     set %.file $dir="Signature file?" [ [ $_mircdir ] $+ ] *.txt
  742.     _timer924on
  743.     if ((%.file == $null) || (* isin %.file)) halt
  744.     _ecfgdc2 12 %.file
  745.   }
  746.   else {
  747.     set %.q $gettok($line(@Account,$1),1-2,32)
  748.     set %_arhelp _ecfgdc2 $1
  749.     set %.old $strip($gettok($line(@Account,$1),6-,32))
  750.     if (%.old == (disabled)) _askr _arhelp Setting for %.q $+ ?
  751.     else _pentry _arhelp $+ $_s2p(%.old) New setting for %.q $+ ?
  752.   }
  753. }
  754. menu @Account {
  755.   dclick /_ecfgdc $1
  756.   Change setting...:_ecfgdc $sline(@Account,1).ln
  757.   Disable setting:_ecfgdc2 $sline(@Account,1).ln 0
  758.   -
  759.   Close:window -c @Account
  760. }
  761. #_email-tb off
  762. alias titlebar { if (@ !isin $1) titlebar $1- %_email-tb | else titlebar $1- }
  763. #_email-tb end
  764. alias _remmailc remini $_ppdir $+ email.ini $1 $2
  765.